const { logger } = require("../config/logConfig")
const bcrypt = require('bcrypt')

const User = require("../models/User")
const utils = require('../config/utils')
// 查询用户列表
async function userList (req, res) {
  let condition = utils.completeSelect(req.body)
  let pageObj = utils.pageSelect(req.body)
  try {
    const user = await User.findAndCountAll({
      offset: pageObj.skip,
      limit: pageObj.limit,
      where: condition,
      order: [['createdAt', 'DESC']], // 根据创建时间倒序排序
      distinct: true,
      attributes: {
        exclude: ["createdAt", "updatedAt"],
      },
    })
    if (!user) {
      utils.responseContent(res, 'OK', 200, data = { list: [], total: 0, pageSize: 10, pageNum: 1 })
    }
    utils.responseContent(res, 'OK', 200, data = {
      list: user.rows,
      pageNum: (pageObj.skip / pageObj.limit) + 1,
      pageSize: pageObj.limit,
      total: user.count
    })
  } catch (error) {
    logger.error(JSON.stringify(error))
    res.status(500).json({ msg: '获取用户列表失败', code: 400 })
  }
}
/**
 * 新增
 * rmk:不用校验的请求参数
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
// 新增用户
async function userAdd (req, res) {
  for (const attr in req.body) {
    if (req.body[attr] === '' && attr !== 'rmk') {
      return res.status(200).json({ msg: `${ User.tableAttributes[attr].comment }(${ attr })不能为空`, code: 40015 })
    }
  }
  const { username, password, mbl, stats, rmk } = req.body

  try {
    // 查询用户表是否存在数据
    const count = await User.count()
    let id
    if (count === 0) {
      // 如果用户表没有数据，则使用随机生成的 ID
      const randomNum = Math.floor(Math.random() * 1000000).toString().padStart(6, '0')
      id = `831${ randomNum }`
    } else {
      // 获取最大ID值，并在此基础上递增生成后续数据的 ID
      const maxIdUser = await User.findOne({ order: [['id', 'DESC']] })
      console.log(maxIdUser)
      const maxId = parseInt(maxIdUser.id) // 获取最大ID的数值部分
      id = maxId + 1
    }

    // 创建新用户
    const hashedPassword = await bcrypt.hash(password, 10)
    await User.create({ id, username, password: hashedPassword, mbl, stats, rmk })
    res.status(200).json({ msg: 'OK', code: 0 })
  } catch (error) {
    res.status(200).json({ msg: '新增用户失败', code: 200 })
  }
}

// 更新用户
async function userUpd (req, res) {
  for (const attr in req.body) {
    if (req.body[attr] === '' && attr !== 'rmk') {
      return res.status(200).json({ msg: `${ User.tableAttributes[attr].comment }(${ attr })不能为空`, code: 40015 })
    }
  }
  const { id, username, password, mbl, stats, rmk } = req.body
  try {
    const user = await User.findOne({ where: { id } })
    if (user === null) {
      res.status(200).json({ msg: '查询用户失败', code: 0 })
    } else {
      let uTime = new Date().getTime()
      await User.update({ username, password, mbl, stats, rmk, uTime }, {
        where: {
          id,
        }
      })
    }
    res.status(200).json({ msg: 'OK', code: 0 })
  } catch (error) {
    res.status(200).json({ msg: error, code: 200 })
  }
}
// 获取单个用户详情
async function userDetail (req, res) {
  const { id } = req.query
  try {
    const user = await User.findOne({ where: { id } })
    if (user === null) {
      res.status(200).json({ msg: '查询用户失败', code: 0 })
    } else {
      res.status(200).json({ msg: 'OK', code: 0, data: { data: user } })
    }
  } catch (error) {
    res.status(200).json({ msg: error, code: 0 })
  }
}
// 删除用户
async function userDele (req, res) {
  const { id } = req.body
  try {
    const user = await User.findOne({ where: { id } })
    if (user === null) {
      res.status(200).json({ msg: '未找到用户', code: 0 })
    } else {
      await User.update({ del: 1 }, {
        where: {
          id
        }
      })
      res.status(200).json({ msg: 'OK', code: 0 })
    }
  } catch (error) {

  }
}
module.exports = { userList, userAdd, userUpd, userDetail, userDele }
